package com.meituan.sqt.model.order.orig;

import lombok.Data;

import java.util.List;

/**
 * @author: chenbocheng02@meituan.com
 * @date: 2022/2/10 8:11 下午
 * @description:
 */
@Data
public class FlightOrderInfo {
    /**
     * 订单基本信息
     */
    private FlightOrderBaseInfo flightOrderBase;
    /**
     * 乘机人列表信息
     */
    private List<FlightOrderPassengerInfo> passengers;
    /**
     * 客票信息
     */
    private List<FlightOrderTicketInfo> tickets;
    /**
     * 保险信息
     */
    private List<FlightOrderInsuranceInfo> insuranceList;
    /**
     * 航班信息
     */
    private List<FlightOrderSegmentInfo> segments;
    /**
     * 低价信息
     */
    private FlightOrderLowInfo lowInfo;

    @Data
    public static class FlightOrderBaseInfo {
        /**
         * 订单状态
         */
        private Integer orderStatus;
        /**
         * 订单金额，单位分
         */
        private Integer orderAmount;
        /**
         * 退票手续费。单位分
         */
        private Integer refundAmount;
        /**
         * 退票原因
         */
        private String refundReason;
        /**
         * 退票备注详情
         */
        private String refundReasonRemark;
        /**
         * 改签手续费，单位分
         */
        private Integer rescheduleAmount;
        /**
         * 改签原因
         */
        private String rescheduleReason;
        /**
         * 改签备注详情
         */
        private String rescheduleReasonRemark;
        /**
         * 协议类型, 1协议航司
         */
        private Integer protocolType;
        /**
         * 联系人手机号
         */
        private String contactPhone;
        /**
         * 1，国内，0，国际（目前不支持国际，均默认为1）
         */
        private Integer internalFlag;
        /**
         * 1 航段序号
         */
        private Integer seg;
        /**
         * 未提前预订原因
         */
        private String notAdvanceBookReason;
        /**
         * 未预订最低价原因
         */
        private String notBookLowestPriceReason;
        /**
         * 下单时间, 13位时间戳
         */
        private Long createTime;
        /**
         * 更新时间, 13位时间戳
         */
        private Long latestUpdateTime;
        /**
         * 代理商名称
         */
        private String agentName;
        /**
         * 提前预订校验天数
         */
        private Integer advanceBookLimitDays;
        /**
         * 提前预订天数
         */
        private Integer advanceDay;
        /**
         * 是否预订超标舱位
         */
        private Boolean isBookExcessStandardCabin;
        /**
         * 预订超标舱位的原因
         */
        private String bookExcessStandardCabinReason;

        /**
         * 历史客票信息
         */
        private List<FlightOrderTicketInfo> beforeTickets;
    }
    @Data
    public static class FlightOrderPassengerInfo {
        /**
         * 乘机人姓名
         */
        private String name;
        /**
         * 乘机人类型 （0:成人,1:儿童,2:婴儿）
         */
        private Integer type;
        /**
         * 乘机人证件编号
         */
        private String idCard;
        /**
         * 乘机人证件类型（0 身份证 1 护照 2 其他）
         */
        private Integer idCardType;
        /**
         * 折扣信息, 比如88折,100代表不打折
         */
        private Integer orderDisCount;
    }
    @Data
    public static class FlightOrderTicketInfo {
        /**
         * 票号，如：784-123456
         */
        private String ticketNumber;
        /**
         * 当前票号状态，如：LIFT/BOARDED
         */
        private String ticketStatus;
        /**
         * 票面价,单位分
         */
        private Integer ticketPrice;
        /**
         * 售卖价,单位分
         */
        private Integer soldPrice;
        /**
         * 燃油费,单位分
         */
        private Integer fuelTax;
        /**
         * 基建费,单位分
         */
        private Integer constructionFee;
        /**
         * 出票时间, 13位时间戳
         */
        private Long ticketTime;
    }
    @Data
    public static class FlightOrderInsuranceInfo {
        /**
         * 保险单号
         */
        private String insNumber;
        /**
         * 保险平台主单号
         */
        private String insOrderId;
        /**
         * 保险公司名
         */
        private String insCompany;
        /**
         * 保险类型：8 组合险 9 航延险 10 航意险
         */
        private Integer insType;
        /**
         * 保险状态，（状态码枚举见保险状态枚举说明），如：7
         */
        private Integer insStatus;
        /**
         * 保险金额,如：3000（单位：分)
         */
        private Integer insAmount;
    }
    @Data
    public static class FlightOrderSegmentInfo {
        /**
         * 航班号，如：MU5120
         */
        private String flightNumber;
        /**
         * 航司码，如：CA
         */
        private String carrieCode;
        /**
         * 航司名称 ，如：中国国航
         */
        private String carrieName;
        /**
         * 出发城市名称，如：北京
         */
        private String departureCityName;
        /**
         * 到达城市名称 ，如：上海
         */
        private String arrivalCityName;
        /**
         * 出发机场三字码，如：PEK
         */
        private String departureCode;
        /**
         * 出发机场名称，如：首都机场
         */
        private String departureName;
        /**
         * 出发航站楼，如：T1
         */
        private String departureTerminal;
        /**
         * 起飞时间，如：1542704100000
         */
        private Long departureTime;
        /**
         * 到达机场三字码，如：SHA
         */
        private String arrivalCode;
        /**
         * 到达机场站名称，如：虹桥机场
         */
        private String arrivalName;
        /**
         * 到达航站楼，如：T2
         */
        private String arrivalTerminal;
        /**
         * 到达时间，如：1542704100000
         */
        private Long arrivalTime;
        /**
         * 舱位，如：V
         */
        private String adultCabin;
        /**
         * 舱等，如：Y,Y:经济舱,C:公务舱,F:头等舱
         */
        private String adultCabinLevel;
        /**
         * 里程,单位公里
         */
        private Integer mileage;
        /**
         * 航程
         */
        private String flightRoute;
        /**
         * 经济舱全价，单位分
         */
        private Integer economyClassFullPrice;

    }
    @Data
    public static class FlightOrderLowInfo {
        /**
         * 订票前后一小时最低价航班号
         */
        private String lowestFlightNumber;
        /**
         * 订票前后一小时最低价折扣
         */
        private Integer lowestDiscount;
        /**
         * 订票前后一小时最低价
         */
        private Integer lowestPrice;
        /**
         * 订票前后N小时最低价航班起飞时间 格式：yyyy-MM-dd HH:mm:ss
         */
        private String lowestDepartTime;
        /**
         * 订票前后N小时最低价航班降落时间 格式：yyyy-MM-dd HH:mm:ss
         */
        private String lowestArriveTime;
        /**
         * 最低价校验小时数
         */
        private Integer lowestPriceLimitHour;
        /**
         * 是否查看最低价 0.未呈现 1.是 2.否
         */
        private Integer browseLowestPriceType;
        /**
         * 是否是系统默认前后1小时最低价信息
         */
        private Boolean isSystemDefaultLowestPriceAround1Hour;
        /**
         * 是否预订最低价航班
         */
        private Boolean isBookLowestPriceFlight;
        /**
         * 是否预订最低价舱位
         */
        private Boolean isBookLowestCabin;
    }
}
